﻿/*
 *      CentroVentasCore32  - CVCore32.dll
 *      
 *      Desarrollado por:
 *                      Francisco Acevedo.
 *                      David Avila.
 *                      José Pérez.
 *                      
 *      Todos los derechos reservados.
 */

/*
 *      CLASE: Usuario   
 * Notas de versión:
 * 
 * [05-01-2012]
 *      -   Creacion de la clase.
 *      -   Comprobacion de que el usuario existe.
 *      -   Creacion de constructores y propiedades más importantes.
 *      -   getUsuario para establecer un usuario a buscar.
 */

using System;
using System.Linq;
using System.Collections;
using System.Collections.Generic;

namespace CVCore32.Class.Funciones.Usuarios
{
    public class Usuario
    {
        #region Constantes y variables

        private int _id = 0;
        private string _rut = "", _nombreReal, _email;
        private bool _activo;
        // TODO: Tipo usuario.

        #endregion

        #region Propiedades

        /// <summary>
        /// Retorna el Id unico del usuario.
        /// </summary>
        public int Id
        {
            get { return _id; }
        }

        /// <summary>
        /// Retorna el rut del usuario.
        /// </summary>
        public string Rut
        {
            get { return _rut; }
        }

        /// <summary>
        /// Retorna y establece el nombre del usuario.
        /// </summary>
        public string NombreReal
        {
            get { return _nombreReal; }

            set
            {
                _nombreReal = value;
                //TODO: Agregar modificación a la BD.
            }
        }

        /// <summary>
        /// Establece la contraseña.
        /// </summary>
        public string Password
        {
            set
            {
                // TODO: Actualizar contraseña.
            }
        }

        /// <summary>
        /// Obtiene o establece el correo electronico del usuario.
        /// </summary>
        public string Email
        {
            get { return _email; }

            set
            {
                _email = value;
                //TODO: Agregar modificación a la BD.
            }

        }

        /// <summary>
        /// Obtiene o establece si el usuario tiene acceso a la aplicación.
        /// </summary>
        public bool Activo
        {
            get { return _activo; }

            set
            {
                _activo = value;
                //TODO: Agregar modificación a la BD.
            }
        }

        #endregion

        #region Metodos estaticos

        /// <summary>
        /// Comprueba que el usuario entregado por el rut exista en la BD.
        /// </summary>
        /// <param name="rut">Rut usuario a evaluar.</param>
        /// <returns>True en caso de que exista.</returns>
        public static bool ExisteUsuario(string rut)
        {
            if (!String.IsNullOrWhiteSpace(rut))
            {
                rut = rut.Replace(".", "");

                CVCore32.Class.Core.Sesion sesion = CVCore32.Class.Core.Sesion.GetInstace;
                CVCore32.Data.electrondbEntities context;
                if (sesion.ServidorWeb)
                {
                    context = new Data.electrondbEntities("Data Source=72.18.135.49, 1533;Initial Catalog=electrondb;User Id=JotaEmePM;Password=ez881010;");
                }
                else
                {
                    context = new Data.electrondbEntities();
                }



                var user = (from usu in context.Usuario
                            where usu.Rut == rut
                            select usu.UsuarioId).Count();
                if (user != 0)
                    return true;
                else
                    return false;
            }
            else
            {
                return false;
            }
        }

        /// <summary>
        /// Obtiene la instancia para el objeto usuario especificando el rut del usuario.
        /// </summary>
        /// <param name="rut"></param>
        /// <returns></returns>
        public static Data.Usuario getUsuario(string rut)
        {
            if (string.IsNullOrWhiteSpace(rut))
                throw new Exception("Usuario erroneo."); // No sé escribio ningun usuario.
            else
            {
                CVCore32.Class.Core.Sesion sesion = CVCore32.Class.Core.Sesion.GetInstace;
                Data.electrondbEntities context;
                if (sesion.ServidorWeb)
                {
                    context = new Data.electrondbEntities("Data Source=72.18.135.49, 1533;Initial Catalog=electrondb;User Id=JotaEmePM;Password=ez881010;");
                }
                else
                {
                    context = new Data.electrondbEntities();
                }

                Data.Usuario usu = (from u in context.Usuario
                                    where u.Rut == rut
                                    select u).FirstOrDefault();
                return usu;
            }
        }

        public static Data.Usuario getUsuario(int idUsuario)
        {
            CVCore32.Class.Core.Sesion sesion = CVCore32.Class.Core.Sesion.GetInstace;
            Data.electrondbEntities context;
            if (sesion.ServidorWeb)
            {
                context = new Data.electrondbEntities("Data Source=72.18.135.49, 1533;Initial Catalog=electrondb;User Id=JotaEmePM;Password=ez881010;");
            }
            else
            {
                context = new Data.electrondbEntities();
            }
            Data.Usuario usu = (from u in context.Usuario
                                where u.UsuarioId == idUsuario
                                select u).FirstOrDefault();
            return usu;
        }

        #endregion



        
    }
}
